/*
 * RegistroAbstracto.h
 *
 *	Es la clase base de la cual descienden los tipos de registros que modelan
 *	los datos que se necesitan procesar
 */

#ifndef REGISTROABSTRACTO_H_
#define REGISTROABSTRACTO_H_

#include <string>
#include "SerialInator.h"
#include "ArbolCommons.h"

using namespace ArbolCommons;

class RegistroAbstracto {
	protected:
		std::string _id;
		SerialInator _serializador;
	public:
		RegistroAbstracto();
		virtual ~RegistroAbstracto();

		void setId(std::string id);
		std::string getId();

		virtual size_t getSize() =0;

		// Serializa el registro, el espacio de memoria ya debe estar alocado
		virtual void pack(char* dataBuffer) =0;

		// Des-serializa los datos contenidos en el buffer y crea el registro
		static RegistroAbstracto* unPack(char* dataBuffer, datosArchivados tipo, bool esHoja);
};



#endif /* REGISTROABSTRACTO_H_ */
